package drongo.desktop.cmd
{
	import flash.desktop.NativeApplication;
	import flash.events.InvokeEvent;
	/**
	 *命令行调用管理器
	 * @author Grayness
	 */	
	public class CMDManager
	{
		public function CMDManager()
		{
		}
		/**
		 *参数输入错误 
		 */		
		public static var DEFAULTCALLBACKTOKEN_ERRORINPUT:String="errorinput";
		/**
		 *没有任何参数输入 
		 */		
		public static var DEFAULTCALLBACKTOKEN_NULLINPUT:String="nullinput";
		/**
		 *默认回调，当未匹配到任何输入时执行默认回调
		 * </p>回调参数参照DEFAULTCALLBACKTOKEN_ERRORINPUT，DEFAULTCALLBACKTOKEN_NULLINPUT
		 */		
		public static var defaultCallBack:Function;
		private static var cmdItemList:Vector.<CMDItem>;
		/**
		 *初始化命令列表 
		 */		
		public static function init(list:Vector.<CMDItem>=null):void
		{
			cmdItemList=list;
			NativeApplication.nativeApplication.removeEventListener(InvokeEvent.INVOKE,appLicationInvoke);
			NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,appLicationInvoke);
		}
		/**
		 *释放管理器 
		 */		
		public static function dispose():void
		{
			cmdItemList=null;
			NativeApplication.nativeApplication.removeEventListener(InvokeEvent.INVOKE,appLicationInvoke);
		}
		private static function appLicationInvoke(e:InvokeEvent):void
		{
			
			if(e.arguments.length>0)
			{
				var find:Boolean=false;
				if(String(e.arguments[0]).charAt(0)=="-")
				{
					//转换输入参数
					var cmdValues:Vector.<CMDValue>=new Vector.<CMDValue>();
					var current:CMDValue;
					for(var i:int=0;i<e.arguments.length;i++)
					{
						if(String(e.arguments[i]).charAt(0)=="-")
						{
							current=new CMDValue();
							current.cmdName=e.arguments[i];
							cmdValues.push(current);
						}
						else
							current.arguValues.push(e.arguments[i]);
					}
					//进行匹配并执行
					for each(var item:CMDItem in cmdItemList)
					{
						if(item.check(cmdValues))
						{
							find=true;
							item.run();
							return;
						}
					}
				}
				if(!find&&defaultCallBack != null)
					defaultCallBack(DEFAULTCALLBACKTOKEN_ERRORINPUT);
			}
			else
			{
				if(defaultCallBack != null)
					defaultCallBack(DEFAULTCALLBACKTOKEN_NULLINPUT);
			}
		}
		/**
		 *添加一个命令 
		 */		
		public static function addCMDItem(item:CMDItem):void
		{
			if(!cmdItemList)
				cmdItemList=new Vector.<CMDItem>();
			cmdItemList.push(item);
		}
		/**
		 *删除一个命令 
		 */		
		public static function removeCMDItem(item:CMDItem):void
		{
			if(!cmdItemList)
				return;
			var index:int=cmdItemList.indexOf(item);
			if(index==-1)
				cmdItemList.splice(index,1);
		}
	}
}